/*
 * This file or a portion of this file is licensed under the terms of
 * the Globus Toolkit Public License, found in file GTPL, or at
 * http://www.globus.org/toolkit/download/license.html. This notice must
 * appear in redistributions of this file, with or without modification.
 *
 * Redistributions of this Software, with or without modification, must
 * reproduce the GTPL in: (1) the Software, or (2) the Documentation or
 * some other similar material which is provided with the Software (if
 * any).
 *
 * Copyright 1999-2004 University of Chicago and The University of
 * Southern California. All rights reserved.
 */

package org.griphyn.vdl.parser;

import org.griphyn.vdl.classes.*;
import org.griphyn.vdl.util.Logging;
import org.xml.sax.*;

/**
 * This class is the error handler for the parser. It defines how to
 * handle three different kinds of parsing exceptions: warning, error,
 * and fatal error. Here we simply print the error message and the location
 * where the error happend.
 *
 * @author Jens-S. Vöckler
 * @author Yong Zhao
 * @version $Revision: 50 $
 */

public class VDLErrorHandler implements ErrorHandler
{
  /**
   * Receive notification of a warning.<p>
   *
   * SAX parsers will use this method to report conditions that are not
   * errors or fatal errors as defined by the XML 1.0 recommendation.
   * The default behaviour is to take no action.<p>
   *
   * The SAX parser must continue to provide normal parsing events after
   * invoking this method: it should still be possible for the
   * application to process the document through to the end.
   *
   * @param e is a warning generated by the SAX parser.
   * @see org.xml.sax.ErrorHandler#warning( org.xml.sax.SAXParseException )
   */
  public void warning ( SAXParseException e )
    throws SAXException
  {
    Logging.instance().log( "app", 1, "*** parser warning *** " +
			    " Line: " + e.getLineNumber() + "\n" +	
			    "[" + e + "]\n");
    //throw new SAXException("Warning occurred");
  }
  
  /**
   * Receive notification of a recoverable error.<p>
   *
   * This corresponds to the definition of "error" in section 1.2 of the
   * W3C XML 1.0 Recommendation. For example, a validating parser would
   * use this callback to report the violation of a validity constraint.
   * The default behaviour is to take no action.<p>
   *
   * The SAX parser must continue to provide normal parsing events after
   * invoking this method: it should still be possible for the
   * application to process the document through to the end. If the
   * application cannot do so, then the parser should report a fatal
   * error even if the XML 1.0 recommendation does not require it to do
   * so.
   *
   * @param e is an error generated by the SAX parser.
   * @see org.xml.sax.ErrorHandler#error( org.xml.sax.SAXParseException )
   */
  public void error( SAXParseException e )
    throws SAXException
  {
    Logging.instance().log( "app", 0, "*** parser error *** " +
			    " Line: " + e.getLineNumber() + "\n" +	
			    "[" + e + "]\n");
    //throw new SAXException("Error occurred");
  }

  /**
   * Receive notification of a non-recoverable error.<p>
   *
   * This corresponds to the definition of "fatal error" in section 1.2
   * of the W3C XML 1.0 Recommendation. For example, a parser would use
   * this callback to report the violation of a well-formedness
   * constraint.<p>
   *
   * The application must assume that the document is unusable after the
   * parser has invoked this method, and should continue (if at all)
   * only for the sake of collecting addition error messages: in fact,
   * SAX parsers are free to stop reporting any other events once this
   * method has been invoked.
   *
   * @param e is a fatal error generated by the SAX parser.
   * @see org.xml.sax.ErrorHandler#fatalError( org.xml.sax.SAXParseException )
   */
  public void fatalError( SAXParseException e )
    throws SAXException
  {
    Logging.instance().log( "default", 0, "!!! fatal error !!! " +
			    " Line: " + e.getLineNumber() + "\n" +	
			    "[" + e + "]\n");
    //throw new SAXException("Fatal Error occurred");
  }
};
